package Principal;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;;


public class HistoriaSimulacao {

	protected LinkedList<Evento> eventos;
	
	public HistoriaSimulacao(){
		eventos = new LinkedList<Evento>();
	}
	
	public void adicionarEvento(Evento evento){
				
		int index = procurarEventoLista(evento);
		
		
		if(index < 0)index = -index - 1;//index = -(posicao onde ele deveria estar)		
		eventos.add(index, evento);
		
	}

	//Procura um evento na lista utlilizando algoritmo Binary search
	private int procurarEventoLista(Evento evento) {
		int index = Collections.binarySearch(eventos, evento,
				new Comparator<Evento>() 
				{			
					@Override
					public int compare(Evento e1, Evento e2) 
					{
						return e1.tempoExecucao.compareTo(e2.tempoExecucao);
					}					
				} 				
									
		  );
		return index;
	}
	
	public void removePrimeiroEventoFila(){
		if(eventos.size()!=0) eventos.removeFirst();
	}
	
	public Evento getPrimeiroEvento(){
		if(eventos.size()==0)return null;
		
		return (Evento)eventos.getFirst();
	}
	
	public boolean isFilaEventosVazia(){
		return (eventos.size() == 0);
	}
	
	public void deletarFimTransmissao(Host hostColidido){		
		int index = 0;
		for(Evento evento : eventos)		
		{
					
			//Se tempo do evento maior do que o do host colidido, saio do for
			if(evento.getTempoExecucao().compareTo( hostColidido.getTempoUltimaTransmissaoHost()) > 0)return;
					
			if((evento.getClass().getName() == EventoFinalTransmissaoSucesso.class.getName()) && (evento.host == hostColidido))
			{
				eventos.remove(index);
				//System.out.printf("Removido\n");
				return ;
			}
			index++;
		}
	}
}
	



